package Factory;

/**
 * Created by IntelliJ IDEA.
 * User: nelson
 */
public class Mensagem {
    private byte[] cmd;
    private byte[] arg;
    private byte[] data;

    /** Constroi uma mensagem */
    public Mensagem() {
        this.cmd = new byte[8];
        this.arg = new byte[56];
    }

    /** Constructor de mensagens */
    public Mensagem (byte[] msg) {
        cmd = new byte[8];
        arg = new byte[56];
        for(int i=0; i<8; i++)
            cmd[i] = msg[i];
        for(int i=0; i<56; i++)
            arg[i] = msg[i+8];
        if(msg.length>64) {
            this.data = new byte[msg.length-56];
            for(int i=64; i<msg.length; i++)
                this.data[i-64] = msg[i];
        }
    }

    /** Devolve o array de bytes com a mensagem */
    public byte[] getToSend() {
        byte[] temp = new byte[8+56+this.data.length];
        for(int i=0; i<8; i++)
            temp[i] = cmd[i];
        for(int i=0; i<56; i++)
            temp[i+8] = arg[i];
        if(this.data.length>0)
            for(int i=0; i<this.data.length; i++)
                temp[i+64] = this.data[i];
        return temp;
    }

    /** Actualiza o comando da mensagem */
    public void setCMD(String cmd) {
        byte [] aux = cmd.getBytes();
        System.arraycopy(aux, 0, this.cmd, 0, aux.length);
    }

    /** Devolve o campo de comando */
    public String getCMD() {
        String temp = new String(this.cmd);
        return temp;
    }

    /** Actualiza o valor do argumento */
    public void setARG(String arg) {
        byte [] aux = arg.getBytes();
        System.arraycopy(aux, 0, this.arg, 0, aux.length);
    }

    /** Devolve o valor do argumento */
    public String getARG() {
        String temp = new String(this.cmd);
        return temp;
    }

    /** Actualiza o campo de dados da mensagem */
    public void setData(byte[] temp) {
        this.data = new byte[temp.length];
        for(int i=0; i<temp.length; i++)
            this.data[i] = temp[i];
    }

    /** Devolve o campo de dados da mensagem */
    public byte[] getData() {
        byte[] temp = this.data;
        return temp;
    }

}
